﻿Imports Newtonsoft.Json.Linq
Imports Newtonsoft.Json

Public Class frmPreguntaws
    Public modeForm As Integer
    Public frmParent As frmMPreguntaws


    Private Sub frmPreguntaws_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Select Case Me.modeForm
            Case 1 'Nuevo
                frmParent.tsbNuevo.Enabled = True
            Case 2 'Consultar
                frmParent.tsbConsultar.Enabled = True
            Case 3 'Editar
                frmParent.tsbEditar.Enabled = True
        End Select
    End Sub

    Private Sub frmPreguntaws_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.btnCancelar.Text = "Cancelar"
        Me.btnGuardar.Visible = True

        Select Case Me.modeForm
            Case 1 'Nuevo
                Me.txtCodigo.Text = ""
                Me.txtNombre.Text = ""
                Me.txtPredeterminado.Text = ""
                Me.cmbTipopregunta.SelectedIndex = -1
                Me.cmbGrupo.SelectedIndex = -1

            Case 2 'Consultar
                Me.txtCodigo.Text = Me.frmParent.arrConsulta(0)
                Me.txtNombre.Text = Me.frmParent.arrConsulta(4)

                If Me.frmParent.arrConsulta(1) <> "" Then
                    Me.cmbTipopregunta.SelectedValue = Me.frmParent.arrConsulta(1)
                Else
                    Me.cmbTipopregunta.SelectedIndex = -1
                End If

                If Me.frmParent.arrConsulta(3) <> "" Then
                    Me.cmbGrupo.SelectedIndex = Me.frmParent.arrConsulta(3) - 1
                Else
                    Me.cmbGrupo.SelectedIndex = -1
                End If

                Me.btnCancelar.Text = "Continuar"
                Me.btnGuardar.Visible = False

            Case 3 'Editar
                Dim dstRecord As New DataSet
                Dim strId As String = Me.frmParent.dgvPregunta.Rows(Me.frmParent.dgvPregunta.CurrentRow.Index).Cells(0).Value.ToString

                dstRecord.Tables.Add("Pregunta")
                mdlConexion.blnOnDB = True
                mdlCRUD.loadRecord(dstRecord, "Pregunta", "pregunta", "pregunta_id = '" & strId & "'", "")
                mdlConexion.blnOnDB = False

                Dim arrRow As Array
                arrRow = dstRecord.Tables("Pregunta").Rows(0).ItemArray.ToArray

                Me.lblEdCodigo.Text = arrRow(0).ToString
                Me.txtCodigo.Text = arrRow(0).ToString
                Me.txtNombre.Text = arrRow(3).ToString
                Me.txtPredeterminado.Text = arrRow(5).ToString

                If arrRow(1).ToString <> "" Then
                    Me.cmbTipopregunta.SelectedValue = arrRow(1).ToString
                Else
                    Me.cmbTipopregunta.SelectedIndex = -1
                End If

                If arrRow(2).ToString <> "" Then
                    Me.cmbGrupo.SelectedIndex = arrRow(2) - 1
                Else
                    Me.cmbGrupo.SelectedIndex = -1
                End If



                Dim objRespuesta() As json_respuestas = Me.DRespuestas(arrRow(4).ToString)

                Me.dgvRespuestas.Rows.Clear()
                If objRespuesta.Count > 0 Then
                    For a As Integer = 0 To objRespuesta.Count - 1
                        Me.dgvRespuestas.Rows.Insert(a, objRespuesta(a).id, objRespuesta(a).value)
                    Next
                End If

        End Select
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        mdlConexion.blnOnDB = True
        Select Case Me.modeForm
            Case 1 'Nuevo
                Dim strRespuesta As String = Me.SRespuestas()
                Dim arrCampos() As String = {"pregunta_id", "preguntatipo_id", "pregunta_grupo", "pregunta_nombre", "pregunta_respuesta", "pregunta_predeterminada"}
                Dim arrValor() As String = {Trim(Me.txtCodigo.Text),
                                            IIf(Me.cmbTipopregunta.SelectedIndex > -1, Me.cmbTipopregunta.SelectedValue, ""),
                                            IIf(Me.cmbGrupo.SelectedIndex > -1, Me.cmbGrupo.SelectedValue, ""),
                                            Trim(Me.txtNombre.Text),
                                            IIf(strRespuesta <> "", strRespuesta, ""),
                                            Trim(Me.txtPredeterminado.Text)}

                mdlCRUD.insRecord("pregunta", arrCampos, arrValor)

            Case 2 'Consultar

            Case 3 'Editar
                Dim strRespuesta As String = Me.SRespuestas()
                Dim arrParametro() As String = {"pregunta_id = " & IIf(Trim(Me.txtCodigo.Text) <> "", "'" & Me.txtCodigo.Text & "'", "null"),
                                                "preguntatipo_id = " & IIf(Me.cmbTipopregunta.SelectedIndex > -1, "'" & Me.cmbTipopregunta.SelectedValue & "'", "null"),
                                                "pregunta_grupo = " & IIf(Me.cmbGrupo.SelectedIndex > -1, "'" & Me.cmbGrupo.SelectedItem & "'", "null"),
                                                "pregunta_nombre = " & IIf(Trim(Me.txtNombre.Text) <> "", "'" & Me.txtNombre.Text & "'", "null"),
                                                "pregunta_respuesta = " & IIf(strRespuesta <> "", "'" & strRespuesta & "'", "null"),
                                                "pregunta_predeterminada = " & IIf(Trim(Me.txtPredeterminado.Text) <> "", "'" & Me.txtPredeterminado.Text & "'", "null")}
                Dim strCondicion As String = "pregunta_id = " & IIf(Me.lblEdCodigo.Text <> "", "'" & Me.lblEdCodigo.Text & "'", "null")



                mdlCRUD.updRecord("pregunta", arrParametro, strCondicion)
        End Select

        mdlConexion.blnOnDB = False

        If (mdlCRUD.blnFlag = True) Then
            Me.frmParent.refreshList()
            Me.Close()
        End If
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Select Case Me.modeForm
            Case 1 'Nuevo

            Case 2 'Consultar			
                Me.frmParent.arrConsulta(0) = Trim(Me.txtCodigo.Text)
                Me.frmParent.arrConsulta(4) = Trim(Me.txtNombre.Text)

                If Me.cmbTipopregunta.SelectedIndex <> -1 Then
                    Me.frmParent.arrConsulta(1) = Trim(Me.cmbTipopregunta.SelectedValue.ToString)
                End If

                If Me.cmbGrupo.SelectedIndex <> -1 Then
                    Me.frmParent.arrConsulta(3) = Trim(Me.cmbGrupo.SelectedValue.ToString)
                End If

                Me.frmParent.refreshList()

            Case 3 'Editar

        End Select


        Me.Close()
    End Sub

    Public Class json_respuestas
        Public id As String
        Public value As String
    End Class

    Private Function DRespuestas(ByVal strCadena As String)
        Dim ojbdes As New JArray
        ojbdes = JsonConvert.DeserializeObject(strCadena)

        Dim objRespuestas() As json_respuestas = (
            From j In ojbdes
                Select New json_respuestas() With {.id = j("id"), .value = j("value")}).ToArray()

        Return objRespuestas
    End Function

    Private Function SRespuestas()
        Dim strRepuestas As String = "[]"
        Dim intRows As Integer = Me.dgvRespuestas.Rows.Count - 2
        Dim objRespuesta(intRows) As json_respuestas

        If intRows >= 0 Then
            Dim intIndex As Integer = 0

            For Each row In Me.dgvRespuestas.Rows
                If Trim(row.Cells(0).value) <> "" Then
                    objRespuesta(intIndex) = New json_respuestas
                    objRespuesta(intIndex).id = row.Cells(0).value
                    objRespuesta(intIndex).value = row.Cells(1).value

                    intIndex += 1
                End If
            Next

            strRepuestas = JsonConvert.SerializeObject(objRespuesta)
        End If
        
        Return strRepuestas
    End Function
End Class